home *** CD-ROM | disk | FTP | other *** search
/ InterCD 2000 September / september_2000.iso / intercd / root / ^Linux / WindowMaker / WINGs / error.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-12-12  |  4.6 KB  |  176 lines

  1. /*
  2.  *  Window Maker miscelaneous function library
  3.  * 
  4.  *  Copyright (c) 1997 Alfredo K. Kojima
  5.  * 
  6.  *  This program is free software; you can redistribute it and/or modify
  7.  *  it under the terms of the GNU General Public License as published by
  8.  *  the Free Software Foundation; either version 2 of the License, or
  9.  *  (at your option) any later version.
  10.  *
  11.  *  This program is distributed in the hope that it will be useful,
  12.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  *  GNU General Public License for more details.
  15.  *
  16.  *  You should have received a copy of the GNU General Public License
  17.  *  along with this program; if not, write to the Free Software
  18.  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  19.  */
  20.  
  21.  
  22. #include "../src/config.h"
  23.  
  24. #include <stdio.h>
  25. #include <stdlib.h>
  26. #include <stdarg.h>
  27. #include <string.h>
  28. #include <errno.h>
  29.  
  30. extern char *_WINGS_progname;
  31.  
  32.  
  33. #define MAXLINE    1024
  34.  
  35.  
  36. /*********************************************************************
  37.  * Returns the system error message associated with error code 'errnum'
  38.  *********************************************************************/
  39. char*
  40. wstrerror(int errnum)
  41. {
  42. #if defined(HAVE_STRERROR)
  43.     return strerror(errnum);
  44. #elif !defined(HAVE_STRERROR) && defined(BSD)
  45.     extern int errno, sys_nerr;
  46. #  ifndef __DECC
  47.     extern char *sys_errlist[];
  48. #  endif
  49.     static char buf[] = "Unknown error 12345678901234567890";
  50.  
  51.     if (errno < sys_nerr)
  52.         return sys_errlist[errnum];
  53.  
  54.     sprintf (buf, "Unknown error %d", errnum);
  55.     return buf;
  56. #else /* no strerror() and no sys_errlist[] */
  57.     static char buf[] = "Error 12345678901234567890";
  58.  
  59.     sprintf(buf, "Error %d", errnum);
  60.     return buf;
  61. #endif
  62. }
  63.  
  64.  
  65. /**************************************************************************
  66.  * Prints a fatal error message with variable arguments and terminates
  67.  * 
  68.  * msg - message to print with optional formatting
  69.  * ... - arguments to use on formatting 
  70.  **************************************************************************/
  71. void 
  72. wfatal(const char *msg, ...)
  73. {
  74.     va_list args;
  75.     char buf[MAXLINE];
  76.  
  77.     va_start(args, msg);
  78.  
  79.     vsprintf(buf, msg, args);
  80.     strcat(buf,"\n");
  81.     fflush(stdout);
  82.     fputs(_WINGS_progname, stderr);
  83.     fputs(" fatal error: ",stderr);
  84.     fputs(buf, stderr);
  85.     fflush(stdout);
  86.     fflush(stderr);
  87.  
  88.     va_end(args);
  89. }
  90.  
  91.  
  92. /*********************************************************************
  93.  * Prints a warning message with variable arguments 
  94.  * 
  95.  * msg - message to print with optional formatting
  96.  * ... - arguments to use on formatting
  97.  *********************************************************************/
  98. void 
  99. wwarning(const char *msg, ...)
  100. {
  101.     va_list args;
  102.     char buf[MAXLINE];
  103.     
  104.     va_start(args, msg);
  105.     
  106.     vsprintf(buf, msg, args);
  107.     strcat(buf,"\n");
  108.     fflush(stdout);
  109.     fputs(_WINGS_progname, stderr);
  110.     fputs(" warning: ",stderr);
  111.     fputs(buf, stderr);
  112.     fflush(stdout);
  113.     fflush(stderr);
  114.     
  115.     va_end(args);
  116. }
  117.  
  118.  
  119. /*********************************************************************
  120.  * Prints a system error message with variable arguments 
  121.  * 
  122.  * msg - message to print with optional formatting
  123.  * ... - arguments to use on formatting
  124.  *********************************************************************/
  125. void 
  126. wsyserror(const char *msg, ...)
  127. {
  128.     va_list args;
  129.     char buf[MAXLINE];
  130.     int error=errno;
  131.  
  132.     va_start(args, msg);
  133.     vsprintf(buf, msg, args);
  134.     fflush(stdout);
  135.     fputs(_WINGS_progname, stderr);
  136.     fputs(" error: ", stderr);
  137.     strcat(buf, ": ");
  138.     strcat(buf, wstrerror(error));
  139.     strcat(buf,"\n");
  140.     fputs(buf, stderr);
  141.     fflush(stderr);
  142.     fflush(stdout);
  143.     va_end(args);
  144. }
  145.  
  146.  
  147. /*********************************************************************
  148.  * Prints a system error message with variable arguments, being given
  149.  * the error code.
  150.  * 
  151.  * error - the error code foe which to print the message
  152.  * msg   - message to print with optional formatting
  153.  * ...   - arguments to use on formatting
  154.  *********************************************************************/
  155. void 
  156. wsyserrorwithcode(int error, const char *msg, ...)
  157. {
  158.     va_list args;
  159.     char buf[MAXLINE];
  160.  
  161.     va_start(args, msg);
  162.     vsprintf(buf, msg, args);
  163.     fflush(stdout);
  164.     fputs(_WINGS_progname, stderr);
  165.     fputs(" error: ", stderr);
  166.     strcat(buf, ": ");
  167.     strcat(buf, wstrerror(error));
  168.     strcat(buf,"\n");
  169.     fputs(buf, stderr);
  170.     fflush(stderr);
  171.     fflush(stdout);
  172.     va_end(args);
  173. }
  174.  
  175.  
  176.